package com.tabnet.servlet.client;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.tabnet.beans.commande.Commande;
import com.tabnet.beans.personnes.Client;
import com.tabnet.dao.DAOCommande;
import com.tabnet.dao.DAOException;
import com.tabnet.dao.DAOFactory;
import com.tabnet.form.client.DetailCommandeForm;

public class DetailCommande extends HttpServlet{
	
	private static final long serialVersionUID = 1L;
	
	    public static final String PARAM_COMMANDE		= "commande";
	    public static final String SESSION_USER 		= "sessionClient";
	    public static final String SESSION_COMMANDE 	= "commande";
	    public static final String SESSION_COMMANDES 	= "commandes";
	    public static final String VUE_SUCCES      		= "/adminClient/detailCommande.jsp";
	    public static final String VUE        			= "/WEB-INF/connexionClient.jsp";
	    
	    private DAOCommande _CommandeDao;
	    
	    public void init() throws ServletException {
	        /* Récupération d'une instance de notre DAO Utilisateur */
	    	try {
				this._CommandeDao = DAOFactory.getInstance().getCommandeDAO();
			}
	    	catch (DAOException e) {
				e.printStackTrace();
			}
	    }
	    
	    @SuppressWarnings("unchecked")
		public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
	    	// Récupération de la valeur de l'URL
	        String refCommande = getValeurParametre( request, PARAM_COMMANDE );
	        Commande oCommande = null;
	        
	        //Récupération des données dans la session
	        HttpSession session = request.getSession();
	    	Client client = (Client) session.getAttribute(SESSION_USER);

			Map<String, Commande> mapCommande = (HashMap<String, Commande>) session.getAttribute(SESSION_COMMANDES);
	        
	        
	        if(mapCommande == null || mapCommande.size() == 0){
		        DetailCommandeForm form = new DetailCommandeForm(this._CommandeDao);
		        oCommande = form.recupCommande(request, refCommande, client.getId());
		        
		        if ( form.getErreurs().isEmpty() && oCommande != null) {
			    	session.setAttribute( SESSION_COMMANDE, oCommande );
		        	this.getServletContext().getRequestDispatcher( VUE_SUCCES + "?" + PARAM_COMMANDE + "=" + refCommande ).forward( request, response );
		        }
		        else {
			    	session.setAttribute( SESSION_COMMANDE, null );
		            response.sendRedirect( request.getContextPath() + VUE );
		        }
	        }
	        else {
		    	// Récupération du produit sélectionnée
	        	oCommande = mapCommande.get(refCommande);
		    	
		        // Affichage du produit sélectionnée
		    	session.setAttribute( SESSION_COMMANDE, oCommande );
		    	if(oCommande != null)
		        	this.getServletContext().getRequestDispatcher( VUE_SUCCES + "?" + PARAM_COMMANDE + "=" + refCommande ).forward( request, response );
		    	else
		            response.sendRedirect( request.getContextPath() + VUE );
	        }
	    }

	    public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
	    	this.doGet(request, response);
	    }
	    
	    /**
	     * <p>Fonction static getValeurParametre<br />
	     * Utilitaire qui retourne null si un paramètre est vide, et son
	     * contenu sinon.</p>
	     * @param request : objet HttpServletRequest
	     * @param nomChamp : nom du champ
	     * @return la valeur du champ
	     */
	    private static String getValeurParametre( HttpServletRequest request, String nomChamp ) {
	        String valeur = request.getParameter( nomChamp );
	        if ( valeur == null || valeur.trim().length() == 0 ) {
	            return null;
	        } else {
	            return valeur;
	        }
	    }
}
